# -*- coding: UTF-8 -*-

import Pyro.core # on importe seulement le module central de Pyro
from Partie import *
from Chat.Chat import *
import threading
import tkSimpleDialog as tks
import tkMessageBox as tkm
import re
import os
from Tkinter import *

class Serveur(Pyro.core.ObjBase):
    def __init__(self):
        Pyro.core.ObjBase.__init__(self) #on initialise ici la classe parent
        self.root = Tk() #besoin pour tks
        self.root.withdraw()
        self.root.title("Serveur CVM-Frogger3000")
        self.root.protocol('WM_DELETE_WINDOW', self.quit)
        self.nbClients = -1
        self.t = None
        
        #On se connecte sur le port 7777
        self.daemon=Pyro.core.Daemon(port=7777)

        self.creerChat()
        self.uri = self.creerPartie()

        self.afficherInfoServeur()
        self.t = threading.Thread(None, lambda  : self.daemon.requestLoop())
        self.t.start()
        
        self.root.mainloop()
    
    def quit(self):
        """ On ferme le serveur. """
        self.root.destroy()
        self.daemon.shutdown()
        if self.t:
            self.t.join()
        os._exit(0)
        sys.exit(0)

    def creerPartie(self):
        #On appelle la méthode nbClients pour connaitre le nombre de clients
        self.nbClients=self.inputJoueursNb()
        if not self.nbClients:
            self.quit()
        #On se connecte sur PartieReseau, qui crée une partie
        uri=self.daemon.connect(PartieReseau(self,self.nbClients,self.chatReseau), "PartieReseau")
        return uri

    def creerChat(self):
        self.chatReseau = ChatReseau()
        uri = self.daemon.connect(self.chatReseau,"Chat")
        return uri

    def creerMiniJeuReseau(self,minijeu,nom):
        uri = self.daemon.connect(minijeu, nom)
        return uri

    def creerPlancheDeJeu(self,pdj,nom):
        uri = self.daemon.connect(pdj, nom)
        return uri

    def afficherInfoServeur(self):
        #Pas sur, mais devrait retourner un string qui représente 
        IP=self.uri.getAttrProxy().URI
        strIP = re.findall('[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+:[0-9]+', str(IP))[0]
        self.root.wm_deiconify()
        l = Label(self.root, text="Votre IP est:")
        l.pack()
        ipLabel = Label(self.root, text=strIP, font=("Helvetica", 16))
        ipLabel.pack()
        Label(self.root).pack()
        ll = Label(self.root, text="Nombre de joueurs:")
        ll.pack()
        nbJoueursLabel = Label(self.root, text=str(self.nbClients), font=("Helvetica", 14))
        nbJoueursLabel.pack()
        
    def inputJoueursNb(self):
        nbJoueurs=tks.askinteger("Joueur", "Veuillez entrer le nombre de joueurs entre 1 et 4", minvalue = 1, maxvalue = 4)
        return nbJoueurs


if __name__=="__main__": # notre main, notre d�marreur d'application
    Pyro.core.initServer() # on initialise l'engin de Pyro
    
    s = Serveur()
    